package r25.room;

import java.util.List;
import java.util.Map;

import r25.board.RoomPosition;
import r25.character.ICharacter;
import r25.engine.IEvent;
import r25.engine.IGameInstance;
import r25.engine.IGameInstance.CHARACTER_ACTION;
import r25.tools.IParametrable;

public interface IRoom extends IParametrable {
	public enum DANGER_LEVEL {
		IN_OUT, SAFE, OBSTACLE, MORTAL
	}

	public enum INITIAL_RANDOM_SET {
		CENTRAL, UNDEFINED, CLOSE, CORNER
	}

	public abstract String getId();

	public abstract String getName();

	public abstract String getDescription();

	public abstract DANGER_LEVEL getDangerLevel();

	public abstract void setName(String name);

	public abstract void setDescription(String description);

	public abstract void setDangerLevel(DANGER_LEVEL dl);

	public abstract Map<String, Object> getParameters();

	public abstract INITIAL_RANDOM_SET getInitialRandomSet();

	public abstract void setInitialRandomSet(INITIAL_RANDOM_SET initialRandomSet);

	public abstract int getPosX();

	public abstract int getPosY();

	public abstract void setPosX(int posX);

	public abstract void setPosY(int posY);

	public abstract boolean canBeControlled();

	public abstract boolean canBeSwitched();

	public abstract boolean isVisible();

	public abstract void setVisible(boolean visible);

	public abstract IRoom newInstance();

	public abstract boolean isAccessible();

	public abstract RoomPosition getRoomPosition();

	public abstract void onReveal(IGameInstance gi, ICharacter character)
			throws Exception;

	public abstract CHARACTER_ACTION onEnter(IGameInstance gi,
			ICharacter character) throws Exception;

	public abstract int countCharacterActions();

	public abstract List<CHARACTER_ACTION> availableCharacterActions();

	public abstract void check(IGameInstance gi, boolean endOfTurn, IEvent s);

}